package com.ggh.handler;
import com.ggh.entity.RoomBeanP;
import com.ggh.entity.UserBean;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**

 * @author ： jj
 * @date ：2019/10/25 14:32
 * @description : 用户操作
 * @path : UserOperationP.java.UserOperationP
 */
public class UserOperationP{
	// 用户坐下
	public int sitDown(UserBean user, RoomBeanP room, int index) {
		room.getLock().lock();// 上锁
		// 判断此位置是否有人
		if (room.getUser_positions()[index] == -1) {
			// 判断用户是否在为之中
			if (user.getLog_lat() == -1) {
				// 用户信息，存入座位
				user.setLog_lat(index);
				// 修改用户游客改为--闲家
				user.setBanker(1);
				// 用户状态改为准备
				user.setReady_state(1);
				// 修改房间位置xinxi
				room.getUser_positions()[index] = user.getUserid();
				room.getLock().unlock();// 开锁
				return 1;
			} else {
				room.getLock().unlock();// 开锁
				return 2;
			}
		}
		room.getLock().unlock();// 开锁
		return 0;
	}


	/**
	* @description :用户抢庄
	* @param user
	* @param room
	* @return: int
	* @date : 2019/10/8 15:19
	* @author : jj
	* @throws
	*/
	public int robBanker(UserBean user, RoomBeanP room) {
		// 上锁
		room.getLock().lock();

		/**
		 * 判断用户房卡数
		 * 	玩家并且未申请上庄
		 */
		if (user.getUpbanker()==0) {
			for (int i=0; i<room.getUpbanker().size();i++){
				if (room.getUpbanker().get(i)==user.getUserid()){
					// 开锁
					room.getLock().unlock();
					return 2;

				}
			}
			// 用户改为申请上庄家
			user.setUpbanker(1);
			// 添加抢庄次数
			user.setRobbanker(user.getRobbanker() + 1);

			// 申请上庄信息放入房间
			room.getUpbanker().add(user.getUserid());

			// 开锁
			room.getLock().unlock();
			// 进行抢庄
			return 1;
		} else {
			// 开锁
			room.getLock().unlock();
			// 用户已申请过
			return 2;
		}
	}

	// 定庄
	public UserBean fixedBanker(RoomBeanP room) {
		room.getLock().lock();
		UserBean user;
		// 判断抢庄人数
		System.out.println("抢庄人数");
		if (room.getUpbanker().size() > 0) {
			// 获取指定的庄家的id
			int userid = room.getUpbanker().get(0);
			System.out.println("庄家id：" + userid);
			// 获取指定庄家用户信息
			user = room.getUserBean(userid);
			room.getUpbanker().remove(0);
			// 没人抢庄
		} else {
			// 指定庄家
			List<Integer> list = new ArrayList<Integer>();
			for (int i = 0; i < room.getUser_positions().length; i++) {
				if (room.getUser_positions()[i] == -1) {
					continue;
				}
				// 获取用户信息
				UserBean u = room.getUserBean(room.getUser_positions()[i]);
				if (u.getReady_state() == 4) {
					continue;
				}
				list.add(room.getUser_positions()[i]);
			}
			int random = (int) (Math.random() * list.size());
			// 获取指定的庄家的id
			int userid = list.get(random);
			System.out.println("庄家id：" + userid);
			// 获取指定庄家用户信息
			user = room.getUserBean(userid);
		}
		// 用户标识改为庄家
		user.setBanker(2);
		// 添加房间庄家
		room.setBanker(user.getUserid());
		// 四人牌九清空庄家申请集合
		if (room.getGame_type()>2){
			room.getUpbanker().clear();
		}
		// 开锁
		room.getLock().unlock();
		return user;
	}

	// 下庄
	public void downBanker(UserBean user, RoomBeanP room) {
		room.getLock().lock();
		// 修改用户庄家标识-改为闲家
		user.setBanker(1);
		// 房间庄家改为-0
		room.setBanker(0);
		user.setDowbanker(0);
		//下一位上庄
		if (room.getUpbanker().size()>1){
			room.setBanker(room.getUpbanker().get(0));
			room.getUpbanker().remove(0);
			UserBean userBean = room.getUserBean(room.getUpbanker().get(0));
			userBean.setBanker(2);
		}
		// 开锁
		room.getLock().unlock();
	}

	// 起座
	public void standUp(UserBean user, RoomBeanP room) {
		room.getLock().lock();
		// 清除房间座位中，对应的用户
		room.getUser_positions()[user.getLog_lat()] = -1;
		// 修改用户标识-改为游客
		user.setBanker(0);
		// 修改用户状态
		user.setReady_state(0);
		// 修改用户座位（-1未默认，无座）
		user.setLog_lat(-1);
		// 开锁
		room.getLock().unlock();
	}


	/**
	 * 扣分方法（包含正常下注）
	 * @param room
	 * @param user
	 * @param fen
	public void payment(RoomBeanP room, UserBean user, int fen) {
		room.getLock().lock();
		// 扣除用户总分
		user.setNumber(user.getNumber() - fen);
		// 添加当前对局下注金额
		user.setDqnumber(user.getDqnumber() + fen);
		// 修改房间池分数
		room.setFenpooling(room.getFenpooling() + fen);
		room.getLock().unlock();
	}
*/

	// 发起解散
	public int dissolution(UserBean user, RoomBeanP room) {
		// 判断房间状态
		if (room.getState() >= 3 && room.getState() <= 10) {
			return -1;
		}

		return 1;
	}

	// 解散（结束）清空房间信息
	public void empty(RoomBeanP room) {
		// 修改房间中所有用户状态
		for (UserBean u : room.getGame_userlist()) {
			// 清除用户池用户
			u.userEmpty();
		}
		// 清除房间
		Public_State_P.roomMap.remove(room.getRoomno());
		Public_State_PSiRen.roomMap.remove(room.getRoomno());
	}

	// 退出房间
	public int signOut(UserBean user, RoomBeanP room) {

		// 清除房间用户信息
		for (int i = 0; i < room.getGame_userlist().size(); i++) {
			if (room.getGame_userlist().get(i).getUserid() == user.getUserid()) {
				room.getGame_userlist().remove(i);
			}
		}
		// 清除用户线程池
		Public_State_P.clients.remove(String.valueOf(user.getUserid()));
		System.out.println("清除结果：" + Public_State_P.clients.get(String.valueOf(user.getUserid())));
		// 清空用户信息
		user.userEmpty();
		return room.getGame_userlist().size();
	}

	// 获取用户房间号
	public String ofRoom(int userid) {
		String roomo = null;

		int a = 0;
		if (Public_State_P.roomMap.size() > 0) {
			Map<String, RoomBeanP> PKMapX = Public_State_P.roomMap;
			// 循环所有房间
			for (String key : PKMapX.keySet()) {
				// 获取房间信息，判断用户是否存在于房间
				RoomBeanP room = PKMapX.get(key);

				if (a == 1) {
					break;
				}
				if (room.getUserBean(userid) != null) {
					a = 1;
					roomo = room.getRoomno();
				}
			}
		}

		return roomo;
	}

}
